/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Estacionamento.ClassesBasicas;

/**
 *
 * @author Italo Valença
 */
import java.util.*;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Type;

@Entity
public class Plano {

    @Id
    @GeneratedValue
    private long id;
    private TipoPlano tipoPlano;
    private double valorPlano;
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "Cliente_Plano", schema = "estacionamento_praticodb", joinColumns = @JoinColumn(name = "id_plano"), inverseJoinColumns = @JoinColumn(name = "id_cliente"))
    @Cascade(CascadeType.ALL)
    private List<Cliente> cliente;
    @Type(type = "yes_no")
    @Column(length = 1)
    private boolean planoLavagem;

    public Plano() {
        // TODO Auto-generated constructor stub
    }

    public Plano(long id, TipoPlano tipoPlano, double valorPlano,
            List<Cliente> cliente, boolean planoLavagem) {
        super();
        this.id = id;
        this.tipoPlano = tipoPlano;
        this.valorPlano = valorPlano;
        this.cliente = cliente;
        this.planoLavagem = planoLavagem;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public double getValorPlano() {
        return valorPlano;
    }

    public void setValorPlano(double valorPlano) {
        this.valorPlano = valorPlano;
    }

    public TipoPlano getTipoPlano() {
        return tipoPlano;
    }

    public void setTipoPlano(TipoPlano tipoPlano) {
        this.tipoPlano = tipoPlano;
    }

    public List<Cliente> getCliente() {
        return cliente;
    }

    public void setCliente(List<Cliente> cliente) {
        this.cliente = cliente;
    }

    public boolean isPlanoLavagem() {
        return planoLavagem;
    }

    public void setPlanoLavagem(boolean planoLavagem) {
        this.planoLavagem = planoLavagem;
    }

    @Override
    public String toString() {
        return "Plano [id=" + id + ", tipoPlano=" + tipoPlano + ", valorPlano="
                + valorPlano + ", cliente=" + cliente + ", planoLavagem="
                + planoLavagem + "]";
    }

}
